#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/stat.h>
#define MAXFILE 65535

int main(void) {
    pid_t pc;
    int i, fd, len;
    char *buf = "Hello,everybody!\n";
    len = strlen(buf);

    pc = fork();  // 第一步
    if (pc < 0) {
        printf("fork error \n");
        exit(1);
    } else if (pc > 0) {
        exit(0);
    }

    // 第二步，下面都是子进程需要执行的代码
    setsid();
    chdir("/");
    umask(0);
    for (i = 0; i < MAXFILE; i++)  // 第五步
        close(i);

    // 以下代码是守护进程真正长期执行的代码或功能
    while (1) {
        if ((fd = open("/tmp/daemon.log", O_CREAT | O_WRONLY | O_APPEND, 0600)) < 0) {
            perror("open");
            exit(1);
        }
        write(fd, buf, len+1);
        close(fd);
        sleep(10);
    }
}
